home *** CD-ROM | disk | FTP | other *** search
/ Windows News 2010 Summer - Disc 1 / WN_Ete2010_CD1.iso / Onglet5 / Weezo / Weezo setup.exe / {code_appDir} / www / includes / editWindow.php < prev    next >
PHP Script  |  2010-05-19  |  6KB  |  164 lines

  1. <?php
  2. /**
  3.  * Text file edition window
  4.  *
  5.  * simple text files remote editor.
  6.  *
  7.  * PHP version 5
  8.  *
  9.  * LICENSE: This source file is subject to version 3.0 of the PHP license
  10.  * that is available through the world-wide-web at the following URI:
  11.  * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
  12.  * the PHP License and are unable to obtain it through the web, please
  13.  * send a note to license@php.net so we can mail you a copy immediately.
  14.  *
  15.  * @category   NA
  16.  * @package    NA
  17.  * @author     Nicolas Bruley / Peer 2 World <contact@weezo.net>
  18.  * @copyright  2005-2009 Nicolas Bruley / Peer 2 World
  19.  * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
  20.  * @version    CVS: $Id:$
  21.  * @link       http://www.weezo.net
  22.  * @since      File available since Release 1.0.0
  23.  */
  24.  
  25.  
  26. /**
  27.  * @desc display text editor
  28.  * @return void
  29.  * @param string $completeFileName complete filename of edited file
  30.  * @param string $action : action :
  31.  *             "edit" : display file in editor
  32.  *             "editSave" : save modified file
  33.  *             "editSaveQuit" : save modified file and quit
  34.  * @param string $savedContent : content to save in file. 2 first characters indicate line break type: 23 for CRLF, or 10 for LF only, 13 for CR only
  35. */
  36. function ewDisplayEditor($completeFileName, $action, $savedContent){
  37.     // Check rights
  38.     $rights=cfFileRights($completeFileName);
  39.     if(!$rights['download'] || !$rights['modify'] || !cfRGetVar('editionAllowed') || !strpos(EDITABLE_FILES,';'.cfFileExtension($completeFileName).';')) outDisplayErrorPage(cfCaption('genNoAccess'));
  40.  
  41.     if($action=='editSave' || $action=='editSaveQuit'){
  42.         // Save file
  43.         $result=false;
  44.         
  45.         // Set line break type
  46.         $lineBreak=substr($savedContent,0,2);
  47.         if($lineBreak==23) $lineBreak=chr(13).chr(10); 
  48.         elseif($lineBreak==10 || $lineBreak==13) $lineBreak=chr($lineBreak);
  49.         else $lineBreak=10;
  50.  
  51.         $savedContent=substr($savedContent,2);
  52.  
  53.         if($fp=@fopen($completeFileName,'w')){
  54.             //cfDbg($savedContent);
  55.             //$savedContent=stripcslashes($savedContent);
  56.             $savedContent=str_replace('<*weezoLB*>',$lineBreak,$savedContent); // \r
  57.             //cfDbg(cfDbgTxt($savedContent,1));
  58.             $result=fwrite($fp,$savedContent);
  59.             fclose($fp);
  60.         }
  61.         // Inform user
  62.         cfAsyncHeader();
  63.         if($result===false) echo cfAsyncXMLJSaction('alert("'.cfCaptionJS('genErrorSaving').'");');
  64.         else echo cfAsyncXMLJSaction('fileSaved()');
  65.         echo cfAsyncFooter();
  66.         exit;
  67.     }
  68.  
  69.  
  70.     // Set close URL back to resource for frameless display
  71.     $_ENV['winCloseURL']='/res/'.cfRGetVar('type').'/'.cfRGetVar('subType').'/'.cfRGetVar('baseFile');
  72.  
  73.     // Insert head and std com form
  74.     cfInsertHEAD(false);
  75.     ?>
  76. <script type="text/javascript" language="javascript">
  77. var modified=false;
  78. var ctrlDown=false;
  79.  
  80. function saveFile(){
  81.     var reg = new RegExp(String.fromCharCode(13)+String.fromCharCode(10)+'|'+String.fromCharCode(13)+'|'+String.fromCharCode(10), "g"); 
  82.     fillAndSubmit(false,'editSave',dgi('lineBreak').value+dgi("ta").value.replace(reg,'<*weezoLB*>'));
  83. }
  84. function fileSaved(){
  85.     dgi('save').style.display="none";
  86.     dgi('saveD').style.display="inline";
  87.     modified=false;
  88. }
  89. // Ctrl-S & Esc detection
  90. function keyD(e){
  91.     if(e) kc=e.which; else {if(window.event) kc=window.event.keyCode; else return;}
  92.     if(kc==17){
  93.         ctrlDown=true;
  94.         return;
  95.     }
  96.     if(kc==27){
  97.         if(!ctrlDown && !modified)    winMe.closeMe();
  98.         return;
  99.     }
  100.     if(kc==83 && ctrlDown){
  101.         if(modified) saveFile();
  102.     }
  103.     else {
  104.         if(modified==false){
  105.             dgi('saveD').style.display="none";
  106.             dgi('save').style.display="inline";
  107.             modified=true;
  108.         }
  109.     }
  110. }
  111. function keyU(e){
  112.     if(e) kc=e.which; else {if(W.event) kc=W.event.keyCode; else return;}
  113.     if(kc==17) ctrlDown=false;
  114. }
  115. </script>
  116.     <?php
  117.     if(cfGetBrowser()=='gecko'){
  118.     ?>
  119. <script type="text/javascript">
  120.     document.onkeydown=keyD;
  121.     document.onkeyup=keyU;
  122. </script>
  123.     <?php
  124.     }
  125.     echo '<body onload="dgi(\'ta\').focus()">';
  126.     outInsertStandardComForm($_SERVER['PHP_SELF'],cfUTF8Encode(dirname($completeFileName)), cfUTF8Encode(basename($completeFileName)),false,false,false,true);
  127.  
  128.     echo outDivFrame('frame1',false,'height:95%');
  129.     echo outFrameHeaderTable('frame1Header',outImage(outIcon('edit'),false,false,'margin-right:1em;').cfUTF8Encode(basename($completeFileName)),outButton(cfCaption('genSave'),'javascript:saveFile()',outIcon('save'),false,'save','style="display:none"').outButtonDisabled(cfCaption('genSave'),false,outIcon('save'),false,'saveD').' '.' ');
  130.  
  131.     // Text area
  132.     echo '<textarea rows="0" cols="0" id="ta" style="position:relative;width:100%; height:95%" '.((cfGetBrowser()!='gecko')?'onkeydown="keyD()" onkeyup="keyU()"':'').'>';
  133.     if(!$fp=@fopen($completeFileName,'r')) echo cfCaption('explorerErrorView');
  134.     else {
  135.         $cr=$lf=$crlf=0;
  136.         while (!feof($fp)) {
  137.             $content=str_replace('<','<',str_replace('&','&',fread($fp, 4096)));
  138.             // Replace all line breaks by single \n
  139.             echo str_replace("\r","\n",str_replace("\r\n","\n",$content));
  140.                         
  141.             // count crlf to determine line break type
  142.             $content=str_replace("\r\n","",$content,$nb);
  143.             $crlf+=$nb;
  144.             
  145.             // Count LF (10)
  146.             str_replace("\n","",$content,$nb);
  147.             $lf+=$nb;
  148.             
  149.             // Count CR (13)
  150.             str_replace("\r","",$content,$nb);
  151.             $cr+=$nb;
  152.             //echo str_replace('&','&',str_replace("\n",chr(13),(fread($fp, 4096))));
  153.         }
  154.         fclose($fp);
  155.         if($crlf>=$cr && $crlf>=$lf) $lineBreak=23;
  156.         elseif($lf>$cr) $lineBreak=10;
  157.         else $lineBreak=13;
  158.     }
  159.     echo '</textarea>';
  160.     if(isset($lineBreak)) echo '<input style="display:none" id="lineBreak" value="'.$lineBreak.'">';
  161.     echo "</div>\n";
  162.     echo '</body></html>';
  163. }
  164. ?>